<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="keywords" content="Hexo Theme Keep">
    <meta name="description" content="Hexo Theme Keep">
    <meta name="author" content="Tckapco">
    
    <title>
        
            计算机网络-DNS |
        
        Tckapco
    </title>
    
<link rel="stylesheet" href="/css/style.css">

    <link rel="shortcut icon" href="/images/logo.svg">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/css/font-awesome.min.css">
    <script id="hexo-configurations">
    let KEEP = window.KEEP || {};
    KEEP.hexo_config = {"hostname":"theboat.gitee.io","root":"/","language":"en"};
    KEEP.theme_config = {"toc":{"enable":true,"number":true,"expand_all":true,"init_open":true},"style":{"primary_color":"#0066CC","avatar":"/images/avatar.jpg","favicon":"/images/logo.svg","article_img_align":"left","left_side_width":"260px","content_max_width":"920px","hover":{"shadow":false,"scale":true},"first_screen":{"enable":true,"background_img":"/images/bg.svg","description":"Keep writing and Keep loving."},"scroll":{"progress_bar":{"enable":false},"percent":{"enable":false}}},"local_search":{"enable":false,"preload":false},"code_copy":{"enable":true,"style":"mac"},"pjax":{"enable":false},"lazyload":{"enable":false},"version":"3.4.5"};
    KEEP.language_ago = {"second":"%s seconds ago","minute":"%s minutes ago","hour":"%s hours ago","day":"%s days ago","week":"%s weeks ago","month":"%s months ago","year":"%s years ago"};
  </script>
<meta name="generator" content="Hexo 5.4.0"></head>


<body>
<div class="progress-bar-container">
    

    
</div>


<main class="page-container">

    

    <div class="page-main-content">

        <div class="page-main-content-top">
            <header class="header-wrapper">

    <div class="header-content">
        <div class="left">
            
            <a class="logo-title" href="/">
                Tckapco
            </a>
        </div>

        <div class="right">
            <div class="pc">
                <ul class="menu-list">
                    
                        <li class="menu-item">
                            <a class=""
                               href="/"
                            >
                                HOME
                            </a>
                        </li>
                    
                        <li class="menu-item">
                            <a class=""
                               href="/archives"
                            >
                                ARCHIVES
                            </a>
                        </li>
                    
                        <li class="menu-item">
                            <a class=""
                               href="/categories"
                            >
                                CATEGORIES
                            </a>
                        </li>
                    
                        <li class="menu-item">
                            <a class=""
                               href="/links"
                            >
                                LINKS
                            </a>
                        </li>
                    
                    
                </ul>
            </div>
            <div class="mobile">
                
                <div class="icon-item menu-bar">
                    <div class="menu-bar-middle"></div>
                </div>
            </div>
        </div>
    </div>

    <div class="header-drawer">
        <ul class="drawer-menu-list">
            
                <li class="drawer-menu-item flex-center">
                    <a class=""
                       href="/">HOME</a>
                </li>
            
                <li class="drawer-menu-item flex-center">
                    <a class=""
                       href="/archives">ARCHIVES</a>
                </li>
            
                <li class="drawer-menu-item flex-center">
                    <a class=""
                       href="/categories">CATEGORIES</a>
                </li>
            
                <li class="drawer-menu-item flex-center">
                    <a class=""
                       href="/links">LINKS</a>
                </li>
            
        </ul>
    </div>

    <div class="window-mask"></div>

</header>


        </div>

        <div class="page-main-content-middle">

            <div class="main-content">

                
                    <div class="fade-in-down-animation">
    <div class="article-content-container">

        <div class="article-title">
            <span class="title-hover-animation">计算机网络-DNS</span>
        </div>

        
            <div class="article-header">
                <div class="avatar">
                    <img src="/images/avatar.jpg">
                </div>
                <div class="info">
                    <div class="author">
                        <span class="name">Tckapco</span>
                        
                            <span class="author-label">Lv2</span>
                        
                    </div>
                    <div class="meta-info">
                        <div class="article-meta-info">
    <span class="article-date article-meta-item">
        <i class="fas fa-edit"></i>&nbsp;
        <span class="pc">2021-07-25 10:13:01</span>
        <span class="mobile">2021-07-25 10:13</span>
    </span>
    
        <span class="article-categories article-meta-item">
            <i class="fas fa-folder"></i>&nbsp;
            <ul>
                
                    <li>
                        <a href="/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a>&nbsp;
                    </li>
                
            </ul>
        </span>
    
    
        <span class="article-tags article-meta-item">
            <i class="fas fa-tags"></i>&nbsp;
            <ul>
                
                    <li>
                        <a href="/tags/DNS/">DNS</a>&nbsp;
                    </li>
                
            </ul>
        </span>
    

    
    
        <span class="article-wordcount article-meta-item">
            <i class="fas fa-file-word"></i>&nbsp;<span>1.9k Words</span>
        </span>
    
    
        <span class="article-min2read article-meta-item">
            <i class="fas fa-clock"></i>&nbsp;<span>6 Mins</span>
        </span>
    
    
</div>

                    </div>
                </div>
            </div>
        

        <div class="article-content markdown-body">
            <h1 id="1-概念"><a href="#1-概念" class="headerlink" title="1.概念"></a>1.概念</h1><p>DNS（Domain Name System，域名系统），将域名与IP的映射相互映射的一个分布式数据库，能够使人方便的访问互联网</p>
<h1 id="2-如何工作"><a href="#2-如何工作" class="headerlink" title="2.如何工作"></a>2.如何工作</h1><p>DNS 协议提供的是一种主机名到 IP 地址的转换服务，就是我们常说的域名系统。是应用层协议，通常该协议运行在UDP协议之上，使用的是53端口号。</p>
<p><strong>查询过程：</strong></p>
<p><img src="https://user-images.githubusercontent.com/34484322/89356512-95168e80-d6f0-11ea-93aa-c4f59fd36942.png" alt="img"></p>
<p>那么问题来了，dns是怎么通过域名来查出ip的呢?我们以浏览器输入<a class="link"   target="_blank" rel="noopener" href="http://www.example.com为例,/" >www.example.com为例，<i class="fas fa-external-link-alt"></i></a></p>
<ol>
<li>检查浏览器缓存 </li>
<li>检查操作系统缓存，常见的如hosts文件</li>
<li>检查路由器缓存</li>
<li>如果前几步都没没找到，会向ISP(网络服务提供商)的LDNS服务器查询</li>
<li>如果LDNS服务器没找到，会向跟域名服务器(Root Server)请求解析，分为以下几步：<ol>
<li>跟服务器返回顶级域名(TLD)服务器如.com，.cn，.org等的地址，全球只有13台，该例子中会返回.com的地址</li>
<li>接着向TLD发送请求，然后会返回次级域名(SLD)服务器的地址，本例子会返回.example的地址</li>
<li>接着向SLD域名服务器通过域名查询目标IP，本例子会返回<a class="link"   target="_blank" rel="noopener" href="http://www.example.com的地址/" >www.example.com的地址<i class="fas fa-external-link-alt"></i></a></li>
<li>Local DNS Server会缓存结果，并返回给用户，缓存在系统中。</li>
</ol>
</li>
</ol>
<blockquote>
<p>查看浏览器缓存可以用工具Chrome cache View</p>
</blockquote>
<p>本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程👇</p>
<p><img src="https://user-images.githubusercontent.com/34484322/89356522-99db4280-d6f0-11ea-9bf9-851b25bd16c3.png" alt="DNS查询">递归查询和迭代查询</p>
<ul>
<li>递归查询指的是查询请求发出后，域名服务器代为向下一级域名服务器发出请求，最后向用户返回查询的最终结果。使用递归查询，用户只需要发出<strong>一次查询</strong>请求。</li>
<li>迭代查询指的是查询请求后，域名服务器返回单次查询的结果。下一级的查询由用户自己请求。使用迭代查询，用户需要发出<strong>多次查询</strong>请求。</li>
</ul>
<p>所以一般而言，<strong>「本地服务器查询是递归查询」</strong>，而<strong>「本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程」</strong>。</p>
<h2 id="DNS缓存"><a href="#DNS缓存" class="headerlink" title="DNS缓存"></a>DNS缓存</h2><p>缓存也很好理解，在一个请求中，当某个DNS服务器收到一个DNS回答后，它能够回答中的信息缓存在本地存储器中。<strong>「返回的资源记录中的 TTL 代表了该条记录的缓存的时间。」</strong></p>
<h2 id="DNS实现负载平衡"><a href="#DNS实现负载平衡" class="headerlink" title="DNS实现负载平衡"></a>DNS实现负载平衡</h2><p>它是如何实现负载均衡的呢？首先我们得清楚DNS 是可以用于在冗余的服务器上实现负载平衡。</p>
<p><strong>原因：</strong>这是因为一般的大型网站使用多台服务器提供服务，因此一个域名可能会对应 多个服务器地址。</p>
<p>举个例子来说👇</p>
<ul>
<li>当用户发起网站域名的 DNS 请求的时候，DNS 服务器返回这个域名所对应的服务器 IP 地址的集合</li>
<li>在每个回答中，会循环这些 IP 地址的顺序，用户一般会选择排在前面的地址发送请求。</li>
<li>以此将用户的请求均衡的分配到各个不同的服务器上，这样来实现负载均衡。</li>
</ul>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><ul>
<li>DNS域名系统，是应用层协议，运行UDP协议之上，使用端口53。</li>
<li>查询过程，本地查询是递归查询，依次通过浏览器缓存 <code>—&gt;&gt;</code> 本地hosts文件 <code>—&gt;&gt;</code> 本地DNS解析器 <code>—&gt;&gt;</code>本地DNS服务器 <code>—&gt;&gt;</code> 其他域名服务器请求。 接下来的过程就是迭代过程。</li>
<li>递归查询一般而言，发送一次请求就够，迭代过程需要用户发送多次请求。</li>
</ul>
<p><strong>DNS 为什么使用 UDP 协议作为传输层协议？</strong></p>
<p>「DNS 使用 UDP 协议作为传输层协议的主要原因是为了避免使用 TCP 协议时造成的连接时延。」</p>
<ul>
<li>为了得到一个域名的 IP 地址，往往会向多个域名服务器查询，如果使用 TCP 协议，那么每次请求都会存在连接时延，这样使 DNS 服务变得很慢。</li>
<li>大多数的地址查询请求，都是浏览器请求页面时发出的，这样会造成网页的等待时间过长。</li>
</ul>
<h1 id="3-DNS优化"><a href="#3-DNS优化" class="headerlink" title="3.DNS优化"></a>3.DNS优化</h1><h2 id="1-DNS-Prefetching"><a href="#1-DNS-Prefetching" class="headerlink" title="1.DNS Prefetching"></a>1.DNS Prefetching</h2><p>用户在请求某个链接之前，浏览器先尝试解析该链接的域名再将其进行缓存。这样真正请求的时候就不需要进行DNS解析。<br>可以在服务器中响应设置<code>X-DNS-Prefetch-Control</code>的值为on启动预解析</p>
<p>或者在HTML中这样配置</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;meta http-equiv&#x3D;&quot;x-dns-prefetch-control&quot; content&#x3D;&quot;on&quot;&gt;</span><br></pre></td></tr></table></figure>

<p>对特定域名预解析</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;link rel&#x3D;”dns-prefetch” href&#x3D;”&#x2F;&#x2F;fonts.googleapis.com”&gt;</span><br></pre></td></tr></table></figure>

<h2 id="2-域名收敛"><a href="#2-域名收敛" class="headerlink" title="2.域名收敛"></a>2.域名收敛</h2><p>建议将静态资源只放在一个域名下面，可以有效减少dns的请求</p>
<h2 id="3-httpdns"><a href="#3-httpdns" class="headerlink" title="3.httpdns"></a>3.httpdns</h2><p>基于Http协议向HTTPDNS服务器发送域名解析请求，替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式，可以避免运营商的域名劫持和进行精准调度。<br>这过程分为两步</p>
<ol>
<li>客户端直接访问HttpDNS接口，获取业务在域名配置管理系统上配置的访问延迟最优的IP。（基于容灾考虑，还是保留次选使用运营商LocalDNS解析域名的方式）</li>
<li>客户端向获取到的IP后就向直接往此IP发送业务协议请求。以Http请求为例，通过在header中指定host字段，向HttpDNS返回的IP发送标准的Http请求即可。</li>
</ol>
<h1 id="4-DNS安全问题"><a href="#4-DNS安全问题" class="headerlink" title="4.DNS安全问题"></a>4.DNS安全问题</h1><ol>
<li><p>DNS反射/放大攻击</p>
<p>向大量开放DNS服务器发送大范围域名查询的DNS请求，并将该DNS请求的源IP地址伪造成想要攻击的目标IP地址。由于请求数据比相应数据小得多，攻击者可以利用该技术放大掌握的带宽资源和攻击流量。</p>
</li>
<li><p>DDOS攻击可能造成域名解析瘫痪</p>
</li>
<li><p>DNS/域名劫持<br>在劫持的网络范围内拦截域名解析的请求，分析请求的域名，返回假的IP地址或者使请求失去响应。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。</p>
</li>
<li><p>DNS污染<br>DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法，指的是用户访问一个地址，国内的服务器(非DNS)监控到用户访问的已经被标记地址时，服务器伪装成DNS服务器向用户发回错误的地址的行为。<br>dns污染与dns劫持的区别在于，dns劫持修改了dns的解析结果，dns污染是不经过dns服务器，返回错误信息</p>
</li>
<li><p>DNS信息黑客被修改</p>
</li>
</ol>
<h1 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h1><p>「查缺补漏」巩固你的HTTP知识体系：<a class="link"   target="_blank" rel="noopener" href="https://juejin.cn/post/6857287743966281736#heading-21" >https://juejin.cn/post/6857287743966281736#heading-21<i class="fas fa-external-link-alt"></i></a></p>
<p>CDN与DNS知识汇总：<a class="link"   target="_blank" rel="noopener" href="https://juejin.cn/post/6844903590662766599" >https://juejin.cn/post/6844903590662766599<i class="fas fa-external-link-alt"></i></a></p>
<h1 id="总结-1"><a href="#总结-1" class="headerlink" title="总结"></a>总结</h1><p>DNS(Domain Name System)域名系统是域名系统，它作为将域名和IP地址相互映射的一个分布式数据库，能够使人更方便地访问互联网。提供的是一种主机名到 IP 地址的转换服务。</p>
<p>是应用层协议，通常运行在UDP协议之上，使用53端口。</p>
<p>查询过程：浏览器–&gt;操作系统–&gt;路由器–&gt;ISP –&gt;本地DNS服务器–&gt;域名服务器</p>

        </div>

        

        
            <ul class="post-tags-box">
                
                    <li class="tag-item">
                        <a href="/tags/DNS/">#DNS</a>&nbsp;
                    </li>
                
            </ul>
        

        
            <div class="article-nav">
                
                    <div class="article-prev">
                        <a class="prev"
                           rel="prev"
                           href="/2021/10/28/%5B%E8%BD%AC%5DWeb%E5%89%8D%E7%AB%AF%E7%9A%84%E5%9B%B0%E5%B1%80%E4%B8%8E%E7%AA%81%E7%A0%B4/"
                        >
                            <span class="left arrow-icon flex-center">
                              <i class="fas fa-chevron-left"></i>
                            </span>
                            <span class="title flex-center">
                                <span class="post-nav-title-item">Web前端的困局与突破[转]</span>
                                <span class="post-nav-item">Prev posts</span>
                            </span>
                        </a>
                    </div>
                
                
                    <div class="article-next">
                        <a class="next"
                           rel="next"
                           href="/2021/07/21/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Gitee%E6%90%AD%E5%BB%BA%E5%9B%BE%E5%BA%8A%EF%BC%9F/"
                        >
                            <span class="title flex-center">
                                <span class="post-nav-title-item">如何使用Gitee免费搭建图床?</span>
                                <span class="post-nav-item">Next posts</span>
                            </span>
                            <span class="right arrow-icon flex-center">
                              <i class="fas fa-chevron-right"></i>
                            </span>
                        </a>
                    </div>
                
            </div>
        

        
    </div>
</div>


                
            </div>

        </div>

        <div class="page-main-content-bottom">
            <footer class="footer">
    <div class="info-container">
        <div class="copyright-info info-item">
            &copy;
            
              <span>2020</span>
              -
            
            2022&nbsp;<i class="fas fa-heart icon-animate"></i>&nbsp;<a href="/">Tckapco</a>
        </div>
        
        <div class="theme-info info-item">
            Powered by <a target="_blank" href="https://hexo.io">Hexo</a>&nbsp;|&nbsp;Theme&nbsp;<a class="theme-version" target="_blank" href="https://github.com/XPoet/hexo-theme-keep">Keep v3.4.5</a>
        </div>
        
        
    </div>
</footer>

        </div>
    </div>

    
        <div class="post-tools">
            <div class="post-tools-container">
    <ul class="tools-list">
        <!-- TOC aside toggle -->
        
            <li class="tools-item page-aside-toggle">
                <i class="fas fa-outdent"></i>
            </li>
        

        <!-- go comment -->
        
    </ul>
</div>

        </div>
    

    <div class="right-bottom-side-tools">
        <div class="side-tools-container">
    <ul class="side-tools-list">
        <li class="tools-item tool-font-adjust-plus flex-center">
            <i class="fas fa-search-plus"></i>
        </li>

        <li class="tools-item tool-font-adjust-minus flex-center">
            <i class="fas fa-search-minus"></i>
        </li>

        <li class="tools-item tool-expand-width flex-center">
            <i class="fas fa-arrows-alt-h"></i>
        </li>

        <li class="tools-item tool-dark-light-toggle flex-center">
            <i class="fas fa-moon"></i>
        </li>

        <!-- rss -->
        

        
            <li class="tools-item tool-scroll-to-top flex-center">
                <i class="fas fa-arrow-up"></i>
            </li>
        

        <li class="tools-item tool-scroll-to-bottom flex-center">
            <i class="fas fa-arrow-down"></i>
        </li>
    </ul>

    <ul class="exposed-tools-list">
        <li class="tools-item tool-toggle-show flex-center">
            <i class="fas fa-cog fa-spin"></i>
        </li>
        
    </ul>
</div>

    </div>

    
        <aside class="page-aside">
            <div class="post-toc-wrap">
    <div class="post-toc">
        <ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#1-%E6%A6%82%E5%BF%B5"><span class="nav-number">1.</span> <span class="nav-text">1.概念</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#2-%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C"><span class="nav-number">2.</span> <span class="nav-text">2.如何工作</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#DNS%E7%BC%93%E5%AD%98"><span class="nav-number">2.1.</span> <span class="nav-text">DNS缓存</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#DNS%E5%AE%9E%E7%8E%B0%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1"><span class="nav-number">2.2.</span> <span class="nav-text">DNS实现负载平衡</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%80%BB%E7%BB%93"><span class="nav-number">2.3.</span> <span class="nav-text">总结</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#3-DNS%E4%BC%98%E5%8C%96"><span class="nav-number">3.</span> <span class="nav-text">3.DNS优化</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-DNS-Prefetching"><span class="nav-number">3.1.</span> <span class="nav-text">1.DNS Prefetching</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-%E5%9F%9F%E5%90%8D%E6%94%B6%E6%95%9B"><span class="nav-number">3.2.</span> <span class="nav-text">2.域名收敛</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-httpdns"><span class="nav-number">3.3.</span> <span class="nav-text">3.httpdns</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#4-DNS%E5%AE%89%E5%85%A8%E9%97%AE%E9%A2%98"><span class="nav-number">4.</span> <span class="nav-text">4.DNS安全问题</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E5%8F%82%E8%80%83"><span class="nav-number">5.</span> <span class="nav-text">参考</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#%E6%80%BB%E7%BB%93-1"><span class="nav-number">6.</span> <span class="nav-text">总结</span></a></li></ol>
    </div>
</div>
        </aside>
    

    <div class="image-viewer-container">
    <img src="">
</div>


    

</main>



<script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/utils.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/main.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/header-shrink.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/back2top.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/dark-light-toggle.js"></script>




    <script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/code-copy.js"></script>




<div class="post-scripts">
    
        <script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/left-side-toggle.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/libs/anime.min.js"></script><script src="//cdn.jsdelivr.net/npm/hexo-theme-keep@3.4.5/source/js/toc.js"></script>
    
</div>



</body>
</html>
